package sort;

/**
 * 希尔排序：是想尽量获取有序的数组，然后直接进行直接插入排序
 */

/**
 * 时间复杂度：O(N1.3)-O(N1.5)
 * 空间复杂度：O(1)
 * 稳定性：不稳定
 */
public class ShellSort implements ISort{

    private void shell(int gap,int[] array) {
        for(int i = gap; i < array.length; i++) {
            for(int j = i - gap; j >= 0; j -= gap) {
                if(array[j] > array[i]) {
                    Swap.swap(array,i,j);
                }
            }
        }
    }
    @Override
    public void sort(int[] array) {
        int gap = array.length / 2;
        while(gap != 0) {
            shell(gap,array);
            gap /= 2;
        }
        InsertSort insertSort = new InsertSort();
        insertSort.sort(array);
    }
}
